package br.com.siscom.controller;

import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

import javax.faces.component.html.HtmlDataTable;

import br.com.siscom.model.bean.BEstoque;
import br.com.siscom.model.bean.Produto;
import br.com.siscom.model.dao.HibernateDAO;
import br.com.siscom.model.dao.InterfaceDao;
import br.com.siscom.model.dao.ProdutoDAO;
import br.com.siscom.util.FacesContextUtil;

public class BaixaEstoqueBean {
	private HtmlDataTable dataTableProdutosDisponiveis;
	private HtmlDataTable dataTableBaixaEstoque;//binding adicionado a pagina baixa_estoque
	private LoginBean login;//necessario porque preciso saber qual usuario esta logado no sistema
	private HashMap<Integer,BEstoque> produtosSelecionados = new HashMap<Integer, BEstoque>();
	private Collection<BEstoque> baixaEstoqueSucesso;	
	
	public Collection<BEstoque> getBaixaEstoqueSucesso() {
		return baixaEstoqueSucesso;
	}
	public Collection<BEstoque> getProdutosSelecionados() {
		return produtosSelecionados.values();
	}
	public String excluirProduto(){
		Produto produto = ((BEstoque)getDataTableBaixaEstoque().getRowData()).getProduto();//getRowData() equivale a linha
		produtosSelecionados.remove(produto.getCodigo());
		return null;
	}
	
	public String confirmarBaixaEstoque(){
		InterfaceDao<BEstoque> bEstoqueDAO = new HibernateDAO<BEstoque>(BEstoque.class, FacesContextUtil.getRequestSession());
		//percorre a lista de elementos que desejo fazer baixa do estoque
		for(BEstoque bEstoque : produtosSelecionados.values()){
			//verifica se o valor solicitado pelo usuario e maior o total de itens disponiveis no estoque
			if(bEstoque.getQuantidade() > bEstoque.getProduto().getEstoque()){
				FacesContextUtil.setMensagemErro("Quantidade Solicitada e maior que a disponivel!");
				return null;
			}
			System.out.println("Quantidade baixada: " +  bEstoque.getQuantidade()+ " Codigo do Produto: " + bEstoque.getProduto().getCodigo());
		}
		bEstoqueDAO.salvar(produtosSelecionados.values());
		baixaEstoqueSucesso = produtosSelecionados.values();
		produtosSelecionados = new HashMap<Integer, BEstoque>();
		return "Sucesso";
	}
	
	public String incluirProduto(){
		Produto produto = (Produto)getDataTableProdutosDisponiveis().getRowData();//getRowData() equivale a linha
		//selecionada no dataTable
		BEstoque bEstoque = new BEstoque();
		bEstoque.setProduto(produto);
		bEstoque.setAutorizado((byte)0);//indica que nao foi autorizado, 1 indica que foi autorizado
		bEstoque.setSolicitanteCodigo(login.getUsuario());
		bEstoque.setDataSolicitacao(new Date());
		
		System.out.println("Produto Selecionado: " + produto.getDescricao());
		produtosSelecionados.put(produto.getCodigo(), bEstoque);
		
		
		return null;
	}
	
	public HtmlDataTable getDataTableBaixaEstoque() {
		return dataTableBaixaEstoque;
	}

	public void setDataTableBaixaEstoque(HtmlDataTable dataTableBaixaEstoque) {
		this.dataTableBaixaEstoque = dataTableBaixaEstoque;
	}

	public List<Produto> getProdutosEstoque(){
		ProdutoDAO produtoDAO = new ProdutoDAO(FacesContextUtil.getRequestSession());
		return produtoDAO.getProdutosEstoque(new Produto(), produtosSelecionados.keySet());		
	}	
	//nao preciso do getLogin
	public void setLogin(LoginBean login) {
		this.login = login;
	}

	public HtmlDataTable getDataTableProdutosDisponiveis() {
		return dataTableProdutosDisponiveis;
	}

	public void setDataTableProdutosDisponiveis(
			HtmlDataTable dataTableProdutosDisponiveis) {
		this.dataTableProdutosDisponiveis = dataTableProdutosDisponiveis;
	}	
	
}
